Conventionally, storing data in a database is a complex problem. Internal data of running program generally has to be serialized to some external format, and special queries in domain-specific language (DSL), such as Sequential Query Language (SQL), have to be constructed and passed to a conventional database. The conventional database then translates the queries back to internal representation, de-serializes data into machine format, and performs actions in response to the queries. The actions performed typically include fetching and storing data from disks or in-memory files, again in an alien format.
Interaction with conventional databases typically requires special design of software, which involves analyzing requirements, designing table structures, and using data queries in DSL. Quite often, it is hard to perform all manipulations over data using SQL because SQL suffers from many well-known limitations.
Besides the required use of DSL, another problem with conventional databases is the limitation of data format used. Typically, data has to be provided to a conventional database in a table format. Unfortunately, not all data structures can be easily converted and stored in the form of tables.